// 下面是我自己的思路
// 我这道题是鹏哥讲过的，做起来居然还有点吃力，有些细节给弄错了
// 后面再去看看视频讲解

#include <cfloat>
enum FLAG
{
    VALID,
    INVALID
};

class Solution {
public:
    int StrToInt(string str) 
    {
        enum FLAG flag = INVALID;
        int sig = 1;

        auto it = str.begin();
        if(*it == '-')
        {
            sig = -1;
            it++;
        }
        else if(*it == '+')
        {
            it++;
        }
        else if(*it < '0' || *it > '9')
        {
            return 0;
        }

        int i = 0;
        int ret = 0;
        auto last_it = str.end() - 1;

        while(last_it >= it)
        {
            if(*last_it < '0' || *last_it > '9')
                return 0;

            ret += ((*last_it - '0') * pow(10, i++));
            last_it--;
        }

        flag = VALID;
        if(flag == INVALID)
        {
            return 0;
        }
        else 
        {
            return ret * sig;
        }
    }
};